﻿using GeneralServices.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ComposantRefentielV2.BLL
{
    public class ReferentielControlBLL
    {
        #region Attribut(s)

        #endregion

        #region Propriété(s)

        public BaseRepository<EntityModel> DAO { get; set; }

        #endregion

        #region Constructeur(s)

        public ReferentielControlBLL(BaseRepository<EntityModel> repository)
        {
            DAO = repository;
        }

        #endregion

        #region Méthode(s)
        /// <summary>
        /// Retourne tous les objets métiers de la table
        /// </summary>
        /// <returns>Retourne une liste de DTO.</returns>
        public List<IDTO> SelectAllBusiness()
        {
            return DAO.All().ToList<IDTO>();
        }

        /// <summary>
        /// Sauvegarde les modifications effectuées par l'utilisateur
        /// </summary>
        /// <returns>Retourne le nombre d'enregistrements modifiés.</returns>
        public int SaveChanges()
        {
            return DAO.UnitOfWork.Commit();
        }

        /// <summary>
        /// Annule toutes les modifications effectuées par l'utilisateur.
        /// </summary>
        /// <returns></returns>
        public List<IDTO> RollBack()
        {
            DAO.RollBackAll();
            return this.SelectAllBusiness();
        }

        /// <summary>
        /// Permet de supprimer un élement.
        /// </summary>
        /// <param name="element">Element à supprimer. Doit etre un objet DTO.</param>
        /// <returns>Retourne le nombre de lignes supprimées.</returns>
        public int Remove(object element)
        {
            if (element is IDTO)
                return DAO.Delete(element as IDTO);
            return 0;
        }

        /// <summary>
        /// Permet de créer un objet vide
        /// </summary>
        /// <returns>Retourne un objet vide.</returns>
        public IDTO CreateElement()
        {
            return DAO.CreateEmpty();
        }

        #endregion

    }
}
